PerlMonks
irc
PasteBot
Kollaboration
Hydra / SubEthaEdit
nur für OSX
mittlerweile Bezahlsoftware
keine Plug-Ins für vi
oder Emacs
Lösungsansatz Perl+JavaScript+HTML
JavaScript "überall" verfügbar
HTML als Displaysprache "gut genug"
Editorkomponente selbst programmierbar
Normale Editorkomponenten haben nur eine Selektion und einen Cursor
Cool
Das Protokoll überträgt Tripel
1: (offset,"alter Text","neuer Text")
1: 0123456789012345678 2: Per aspera ad astra
Das Protokoll überträgt Tripel
1: (offset,"alter Text","neuer Text")
1: 0123456789012345678 2: Per aspera ad astra
Einfügen: (3,"","l")
:
1: 01234567890123456789 2: Perl aspera ad astra
Das Protokoll überträgt Tripel
1: (offset,"alter Text","neuer Text")
1: 01234567890123456789 2: Perl aspera ad astra
Löschen: (5,"aspera ","")
:
1: 0123456789012 2: Perl ad astra
Das Protokoll überträgt Tripel
1: (offset,"alter Text","neuer Text")
1: 0123456789012 2: Perl ad astra
Ersetzen: (4," ad astra","workshop")
:
1: 0123456789012 2: Perlworkshop
Das Protokoll überträgt Tripel
1: (offset,"alter Text","neuer Text")
1: 0123456789012 2: Perlworkshop
Undo: (4,"workshop"," ad astra")
:
1: 0123456789012 2: Perl ad astra
Vorteile der Tripeldarstellung:
Undo/Redo
Leichte Verteilbarkeit
Simpel zu implementieren:
Perl: substr($ofs,$alt,$neu)
JavaScript: string.substring(ofs,alt,neu)
Tripel sind nicht deskriptiv:
"Grosse" Aufgaben werden in kleine Schritte gebrochen
Suchen / Ersetzen
Zeile duplizieren
Keine Transaktionen im Protokoll
1: 0123456789012345678901 2: Deutsher Pearlworkshop
1: Sender Position alt neu 2: --------------------------------- 3: A->Z 5 "" "c" 4: Z->A accepted 5: B->Z 11 "a" "" 6: Z->B accepted 7: 5 "" "c" 8: A->Z () 9: Z->A 12 "a" ""
B's Cursorposition muss jetzt 12 sein!
Dokument pufferbasiert, nicht zeilenbasiert
1: $document = "Zeile1\nZeile2\n...Letzte Zeile";
statt der naiven Implementation
1: @document = ( 2: 'Zeile1', 3: 'Zeile2', 4: ... 5: 'Letzte Zeile' 6: )
Vorteile
Leicht in Perl und JavaScript zu implementieren
Newlines sind kein Problem
Nachteile
Speicherintensiv
Zeilencache für Zeilenanfänge nötig
Darstellung als HTML benötigt Umformatierung
User Management
connect_client
new_user
für den Namen des Users
disconnect_client
Dokumente
users
document
set_name
actions
"Bots" für den Editor:
1: Parsen auf "XXX" 2: Parsen auf "TODO" 3: Testläufe für die Datei im Hintergrund 4: Perl::Critic zur Annotation des Quellcodes
http://zaphod.datenzoo.de/ (v0.02, alt und optisch noch weniger ansprechend)
Fragen?